--- title: "L2-004 这是二叉搜索树吗?" created: 2025-11-28 tags: - 算法 --- # L2-004 这是二叉搜索树吗? ## 题目 [L2-004 这是二叉搜索树吗?](https://pintia.cn/problem-sets/994805046380707840/exam/problems/type/7?problemSetProblemId=994805070971912192&page=1) ![[image-19b56b20.png]] ## 思路分析 ![[image-664d258c.png]] ## 代码实现 ```cpp #include using namespace std; #define endl '\n' using ll = long long; using ull = unsigned long long; using PII = pair; using Pll = pair; int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1}; const int inf = 0x3f3f3f3f; const int N=1010; int pre[N]; vector ans; bool is_mirror=false; void dfs(int l,int r){ if(l>r) return; int i = l+1,j=r; if(!is_mirror){ while(i<=r && pre[i]=l+1 && pre[j]>=pre[l]) j--; }else{ while(i<=r && pre[i]>=pre[l]) i++; while(j>=l+1 && pre[j]>n; for(int i=0;i>pre[i]; dfs(0,n-1); if(ans.size() != n){ is_mirror = true; ans.clear(); dfs(0,n-1); } if(ans.size() != n){ cout<<"NO"<